/**
 * 专门用于解决单个页面有多个场景的js调用情况。
 * 在这种情况中,多个场景(如游戏首页和游戏本体)都在一个html中引用了,
 * 用户点击开始游戏时,不知道游戏本体文件是否已经加载完成,
 * 贸然调用会导致出错,所以使用该方法,可以做到加载成功后再执行。
 * Created by haua on 16/6/23.
 */
(function () {
    var fns = {},
        HCall = {},//这个对象
        calling = {};//已经被调用,但是还没加载的,key是函数名,value是调用这个函数的参数

    /**
     * 传入函数名来调用函数,如果该函数存在就调用,如果不存在就等待调用
     * @param fnName
     * @param args array 调用该函数时传入的参数,数组的形式
     * */
    HCall.call = function (fnName,args){
        if(fns[fnName]){
            fns[fnName](args);
        }else{
            calling[fnName] = $.extend({},args,true);
        }
    };
    
    /**
     * 注册一个事件,注意函数名不能和其它重复,否则会覆盖其它函数
     * */
    HCall.add = function(fnName,fn) {
        if(fns[fnName]){
            console.error('[HCall.add]已经有重复的名字了,不要重复添加啊');
        }else{
            fns[fnName] = fn;
            if(calling[fnName]){
                fn(calling[fnName]);
                calling[fnName] = undefined;
            }
        }
    };
    /**
     * 移除已注册的事件
     * */
    HCall.remove = function (fnName) {
        fns[fnName] = undefined;
    };

    window.HCall = HCall;
}());